package com.taoyibao.hongcanting.utils;

import android.content.Context;

import com.taoyibao.hongcanting.BuildConfig;
import com.taoyibao.hongcanting.ui.HongApplication;

import java.util.HashSet;
import java.util.Set;

import cn.jpush.android.api.JPushInterface;

/**
 * @author TangAnna
 * @description: 极光推送工具类
 * @date :${DATA} 17:28
 */
public class JPushUtils {

    /**
     * Debug模式是否开启
     */
    private static final boolean DEBUG_MODE = BuildConfig.DEBUG;

    /**
     * 屏幕操作员的标签
     */
    public static final String TAG_SCREENER = "screener";
    /**
     * 服务员的标签
     */
    public static final String TAG_WAITER = "waiter";

    /**
     * 设置身份tag使用的序号
     */
    public static final int SEQUENCE_IDENTITY_0 = 0;

    /**
     * 初始化JPush
     */
    public static void init() {
        JPushInterface.init(HongApplication.getContext());
    }

    /**
     * 设置JPush是否是Debug模式
     */
    public static void setDebugMode() {
        JPushInterface.setDebugMode(DEBUG_MODE);
    }

    /**
     * 登录时进行绑定
     * 设置Alias
     *
     * @param context
     * @param sequence
     * @param alias    每次调用设置有效的别名，覆盖之前的设置。
     *                 有效的别名组成：字母（区分大小写）、数字、下划线、汉字、特殊字符@!#$&*+=.|。
     *                 限制：alias 命名长度限制为 40 字节。（判断长度需采用 UTF-8 编码）
     */
    public void setAlias(Context context, int sequence, String alias) {
        JPushInterface.setAlias(context, sequence, alias);
    }

    /**
     * 获取别名
     *
     * @param context
     * @param sequence
     */
    public void getAlias(Context context, int sequence) {
        JPushInterface.getAlias(context, sequence);
    }

    /**
     * 退出登录进行解除Alias的绑定（即不再接收根据别名推送的消息）
     *
     * @param context
     * @param sequence
     */
    public void deleteAlias(Context context, int sequence) {
        JPushInterface.deleteAlias(context, sequence);
    }

    /**
     * 设置Tags
     * 覆盖
     *
     * @param i
     * @param set 每次调用至少设置一个 tag，覆盖之前的设置，不是新增。
     *            有效的标签组成：字母（区分大小写）、数字、下划线、汉字、特殊字符@!#$&*+=.|。
     *            限制：每个 tag 命名长度限制为 40 字节，最多支持设置 1000 个 tag，且单次操作总长度不得超过 5000 字节。（判断长度需采用 UTF-8 编码）
     *            单个设备最多支持设置 1000 个 tag。App 全局 tag 数量无限制。
     */
    public static void setTags(int i, Set<String> set) {
        if (set == null || filterValidTags(set) == null || filterValidTags(set).size() < 1) {
            return;
        }
        JPushInterface.setTags(HongApplication.getContext(), i, filterValidTags(set));
    }

    /**
     * 新增tag
     * 不会覆盖
     *
     * @param context
     * @param sequence
     * @param tags     每次调用至少新增一个 tag。
     *                 有效的标签组成：字母（区分大小写）、数字、下划线、汉字、特殊字符@!#$&*+=.|。
     *                 限制：每个 tag 命名长度限制为 40 字节，最多支持设置 1000 个 tag，且单次操作总长度不得超过 5000 字节。（判断长度需采用 UTF-8 编码）
     *                 单个设备最多支持设置 1000 个 tag。App 全局 tag 数量无限制。
     */
    public static void addTags(Context context, int sequence, Set<String> tags) {
        JPushInterface.addTags(HongApplication.getContext(), sequence, filterValidTags(tags));
    }

    /**
     * 查询指定 tag 与当前用户绑定的状态。
     *
     * @param sequence
     * @param tag
     */
    public static void checkTagBindState(int sequence, String tag) {
        JPushInterface.checkTagBindState(HongApplication.getContext(), sequence, tag);
    }

    /**
     * 删除Tags
     *
     * @param context
     * @param i
     * @param set
     */
    public void deletTags(Context context, int i, Set<String> set) {
        JPushInterface.deleteTags(context, i, filterValidTags(set));
    }

    public static void cleanTags(int sequence) {
        JPushInterface.cleanTags(HongApplication.getContext(), sequence);
    }

    /**
     * 过滤有效的tag
     *
     * @param set
     * @return
     */
    public static Set<String> filterValidTags(Set<String> set) {
        return JPushInterface.filterValidTags(set);
    }

    /**
     * @return
     */
    public int getSequence() {
        return 0;
    }

    /**
     * 关闭推送功能
     */
    public void stopJPhush() {
        JPushInterface.stopPush(HongApplication.getInstance());
    }

    /**
     * 回复推送功能
     */
    public void resumeJPush() {
        JPushInterface.resumePush(HongApplication.getInstance());
    }

    /**
     * 是否已经停止推送功能
     *
     * @return true停止   false 未停止
     */
    public boolean isStopedJPush() {
        return JPushInterface.isPushStopped(HongApplication.getInstance());
    }

    /**
     * 获取屏幕操作员的tag
     *
     * @return
     */
    public static Set<String> getScreenerTag() {
        Set<String> set = new HashSet<>();
        set.add(TAG_SCREENER);
        return set;
    }

    /**
     * 获取服务员的Tag
     *
     * @return
     */
    public static Set<String> getWaiterTag() {
        Set<String> set = new HashSet<>();
        set.add(TAG_WAITER);
        return set;
    }

}
